/*
- 对于每行的括号，我们可以简化为，去掉已经成对的括号。
- 那么只有四种情况。
- 只剩左括号(((、只剩右括号)))、左右都有但是不可能成对))(、都能成对消掉
- a[k]记录k个括号的行数，左+，右-，每次修改时，记录是否配对
- cnt记录本身就能消掉的行数。
*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 5e5+100;
int T,n,a[N],ans,cnt;
string s;
int main() {
    cin >> n;
    while (n--)
    {
        cin >> s;
        int left=0,right=0;
        // 去掉成对的括号
        stack<char> st;
        for(int i=0;i<s.length();i++) {
            if(s[i] == '(') st.push(s[i]);
            else {
                if(!st.empty()) st.pop();
                else right++;
            }
        }
        left += st.size();
        if(left != 0 && right == 0) { /// 只有左边括号(((
            if(a[left] < 0) ++ans;
            a[left] ++;
        } else if(left ==0 && right != 0) { //只有右边括号)))
            if(a[right] > 0) ++ans;
            a[right] --;
        } else if(left ==0 && right == 0)  ++cnt;//配对的括号(())
    }
    cout << ans + cnt/2;
    return 0;
}